Skip to content

Conversation

@vaxerski
Copy link
Member

@vaxerski vaxerski commented Nov 28, 2025

rewrites everything from scratch with hyprtoolkit.

New config:

wallpaper {
    monitor = ... # wildcard is still empty
    fit_mode = cover # default
    path = ...
}

TODO:

  • ipc
  • testing
  • hyprtoolkit release (requires git)
  • hyprwire release

Wiki: hyprwm/hyprland-wiki#1303

@alba4k
Copy link

alba4k commented Nov 30, 2025

THIS THAT DONT WORK

  • pretty sure there's a missing [ before ERR and DEBUG
see image immagine
  • I'm not sure this was intended, but looks like we can't use ~ anymore?

  • Where splash options? (splash works tho)

  • when having hyprpaper running on my laptop and connecting 2 screens I got a wallpaper only on the laptop and the left monitor (arranged eDP-1 DP-5 DP-7). was fine after relaunching

THIS THAT WORK

  • wallpaper on my laptop's 1920x1200 screen
  • wallpaper on 1920x1200 + 2x1920x1080 (ONLY when launching hyprpaper after connecting the two monitors)

WILL TEST LATER

  • 21:9 screen with and without laptop screen on (I have it in zurich and will only be there tomorrow)

@vaxerski
Copy link
Member Author

pretty sure there's a missing [ before ERR and DEBUG

No, that's intentional.

I'm not sure this was intended, but looks like we can't use ~ anymore?

oops.

Where splash options? (splash works tho)

they are there I just didnt mention them in the mr

when having hyprpaper running on my laptop and connecting 2 screens I got a wallpaper only on the laptop and the left monitor (arranged eDP-1 DP-5 DP-7). was fine after relaunching

I've noticed some issues there too, I'll check.

@vaxerski
Copy link
Member Author

paths fixed. Outputs fixed in hyprtoolkit (git)

@alba4k
Copy link

alba4k commented Nov 30, 2025

No, that's intentional.

...but why?

yeah wallpapers appears on both monitors now. Will be in ZH at ~22.00 and check 21:9 there

@vaxerski
Copy link
Member Author

zh? enjoy your china trip

@alba4k
Copy link

alba4k commented Nov 30, 2025

I'm loving the chicken here yeah

btw 21:9 seems fine. I got a crash when disconnecting the monitor with shikane running (which is supposed to turn my laptop back on after I disconnect the external monitor, but isn't doing that)

so maybe you can replicate this by disabling the only active monitor? Cause that's pretty muxh what's happeninf

@vaxerski
Copy link
Member Author

cant repro, debug stacktrace maybe?

@EvilLary
Copy link

EvilLary commented Dec 2, 2025

fit_mode no worky because it's hard coded to cover in UI.cpp:39.

Unplugging a monitor and plugging it back again doesn't create a wallpaper for it. I assume that's because monitor state isn't removed from m_monitorStates on disconnect.

hyprtoolkit built against hyprwm/hyprtoolkit@34a758f

wayland log
[3478297.701] {Default Queue}  -> wl_display#1.get_registry(new id wl_registry#2)
[3478297.735] {Default Queue}  -> wl_display#1.sync(new id wl_callback#3)
[3478297.850] {Display Queue} wl_display#1.delete_id(3)
[3478297.858] {Default Queue} wl_registry#2.global(1, "wl_seat", 9)
[3478297.863] {Default Queue}  -> wl_registry#2.bind(1, "wl_seat", 9, new id [unknown]#4)
[3478297.873] {Default Queue} wl_registry#2.global(2, "wl_data_device_manager", 3)
[3478297.876] {Default Queue} wl_registry#2.global(3, "wl_compositor", 6)
[3478297.879] {Default Queue}  -> wl_registry#2.bind(3, "wl_compositor", 6, new id [unknown]#5)
[3478297.881] {Default Queue} wl_registry#2.global(4, "wl_subcompositor", 1)
[3478297.884] {Default Queue} wl_registry#2.global(5, "wl_shm", 1)
[3478297.886] {Default Queue}  -> wl_registry#2.bind(5, "wl_shm", 1, new id [unknown]#6)
[3478297.889] {Default Queue} wl_registry#2.global(6, "wp_viewporter", 1)
[3478297.891] {Default Queue}  -> wl_registry#2.bind(6, "wp_viewporter", 1, new id [unknown]#7)
[3478297.894] {Default Queue} wl_registry#2.global(7, "wp_tearing_control_manager_v1", 1)
[3478297.896] {Default Queue} wl_registry#2.global(8, "wp_fractional_scale_manager_v1", 1)
[3478297.898] {Default Queue}  -> wl_registry#2.bind(8, "wp_fractional_scale_manager_v1", 1, new id [unknown]#8)
[3478297.902] {Default Queue} wl_registry#2.global(9, "zxdg_output_manager_v1", 3)
[3478297.904] {Default Queue} wl_registry#2.global(10, "wp_cursor_shape_manager_v1", 2)
[3478297.906] {Default Queue}  -> wl_registry#2.bind(10, "wp_cursor_shape_manager_v1", 1, new id [unknown]#9)
[3478297.909] {Default Queue} wl_registry#2.global(11, "zwp_idle_inhibit_manager_v1", 1)
[3478297.911] {Default Queue} wl_registry#2.global(12, "zwp_relative_pointer_manager_v1", 1)
[3478297.913] {Default Queue} wl_registry#2.global(13, "zxdg_decoration_manager_v1", 1)
[3478297.915] {Default Queue} wl_registry#2.global(14, "wp_alpha_modifier_v1", 1)
[3478297.917] {Default Queue} wl_registry#2.global(15, "zwlr_gamma_control_manager_v1", 1)
[3478297.919] {Default Queue} wl_registry#2.global(16, "ext_foreign_toplevel_list_v1", 1)
[3478297.922] {Default Queue} wl_registry#2.global(17, "zwp_pointer_gestures_v1", 3)
[3478297.924] {Default Queue} wl_registry#2.global(18, "zwlr_foreign_toplevel_manager_v1", 3)
[3478297.926] {Default Queue} wl_registry#2.global(19, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1)
[3478297.928] {Default Queue} wl_registry#2.global(20, "zwp_text_input_manager_v1", 1)
[3478297.930] {Default Queue} wl_registry#2.global(21, "zwp_text_input_manager_v3", 1)
[3478297.933] {Default Queue}  -> wl_registry#2.bind(21, "zwp_text_input_manager_v3", 1, new id [unknown]#10)
[3478297.938] {Default Queue} wl_registry#2.global(22, "zwp_pointer_constraints_v1", 1)
[3478297.940] {Default Queue} wl_registry#2.global(23, "zwlr_output_power_manager_v1", 1)
[3478297.942] {Default Queue} wl_registry#2.global(24, "xdg_activation_v1", 1)
[3478297.944] {Default Queue} wl_registry#2.global(25, "ext_idle_notifier_v1", 2)
[3478297.946] {Default Queue} wl_registry#2.global(26, "hyprland_lock_notifier_v1", 1)
[3478297.948] {Default Queue} wl_registry#2.global(27, "ext_session_lock_manager_v1", 1)
[3478297.951] {Default Queue}  -> wl_registry#2.bind(27, "ext_session_lock_manager_v1", 1, new id [unknown]#11)
[3478297.953] {Default Queue} wl_registry#2.global(28, "zwp_input_method_manager_v2", 1)
[3478297.955] {Default Queue} wl_registry#2.global(29, "zwp_virtual_keyboard_manager_v1", 1)
[3478297.957] {Default Queue} wl_registry#2.global(30, "zwlr_virtual_pointer_manager_v1", 2)
[3478297.959] {Default Queue} wl_registry#2.global(31, "zwlr_output_manager_v1", 4)
[3478297.962] {Default Queue} wl_registry#2.global(32, "org_kde_kwin_server_decoration_manager", 1)
[3478297.964] {Default Queue} wl_registry#2.global(33, "hyprland_focus_grab_manager_v1", 1)
[3478297.966] {Default Queue} wl_registry#2.global(34, "zwp_tablet_manager_v2", 1)
[3478297.968] {Default Queue} wl_registry#2.global(35, "zwlr_layer_shell_v1", 5)
[3478297.970] {Default Queue}  -> wl_registry#2.bind(35, "zwlr_layer_shell_v1", 5, new id [unknown]#12)
[3478297.976] {Default Queue} wl_registry#2.global(36, "wp_presentation", 2)
[3478297.979] {Default Queue} wl_registry#2.global(37, "xdg_wm_base", 7)
[3478297.981] {Default Queue}  -> wl_registry#2.bind(37, "xdg_wm_base", 6, new id [unknown]#13)
[3478297.987] {Default Queue} wl_registry#2.global(38, "zwlr_data_control_manager_v1", 2)
[3478297.990] {Default Queue} wl_registry#2.global(39, "zwp_primary_selection_device_manager_v1", 1)
[3478297.992] {Default Queue} wl_registry#2.global(40, "xwayland_shell_v1", 1)
[3478297.994] {Default Queue} wl_registry#2.global(41, "zwlr_screencopy_manager_v1", 3)
[3478297.996] {Default Queue} wl_registry#2.global(42, "hyprland_toplevel_export_manager_v1", 2)
[3478297.999] {Default Queue} wl_registry#2.global(43, "hyprland_toplevel_mapping_manager_v1", 1)
[3478298.001] {Default Queue} wl_registry#2.global(44, "hyprland_global_shortcuts_manager_v1", 1)
[3478298.003] {Default Queue} wl_registry#2.global(45, "xdg_wm_dialog_v1", 1)
[3478298.005] {Default Queue} wl_registry#2.global(46, "wp_single_pixel_buffer_manager_v1", 1)
[3478298.007] {Default Queue} wl_registry#2.global(47, "wp_security_context_manager_v1", 1)
[3478298.009] {Default Queue} wl_registry#2.global(48, "hyprland_ctm_control_manager_v1", 2)
[3478298.011] {Default Queue} wl_registry#2.global(49, "hyprland_surface_manager_v1", 2)
[3478298.014] {Default Queue} wl_registry#2.global(50, "wp_content_type_manager_v1", 1)
[3478298.016] {Default Queue} wl_registry#2.global(51, "xdg_toplevel_tag_manager_v1", 1)
[3478298.018] {Default Queue} wl_registry#2.global(52, "xdg_system_bell_v1", 1)
[3478298.020] {Default Queue} wl_registry#2.global(53, "ext_workspace_manager_v1", 1)
[3478298.022] {Default Queue} wl_registry#2.global(54, "ext_data_control_manager_v1", 1)
[3478298.024] {Default Queue} wl_registry#2.global(55, "wp_pointer_warp_v1", 1)
[3478298.026] {Default Queue} wl_registry#2.global(56, "wp_fifo_manager_v1", 1)
[3478298.028] {Default Queue} wl_registry#2.global(57, "wp_commit_timing_manager_v1", 1)
[3478298.031] {Default Queue} wl_registry#2.global(58, "wp_drm_lease_device_v1", 1)
[3478298.033] {Default Queue} wl_registry#2.global(59, "wp_linux_drm_syncobj_manager_v1", 1)
[3478298.035] {Default Queue}  -> wl_registry#2.bind(59, "wp_linux_drm_syncobj_manager_v1", 1, new id [unknown]#14)
[3478298.038] {Default Queue} wl_registry#2.global(60, "wl_drm", 2)
[3478298.040] {Default Queue} wl_registry#2.global(61, "zwp_linux_dmabuf_v1", 5)
[3478298.042] {Default Queue}  -> wl_registry#2.bind(61, "zwp_linux_dmabuf_v1", 4, new id [unknown]#15)
[3478298.049] {Default Queue}  -> zwp_linux_dmabuf_v1#15.get_default_feedback(new id zwp_linux_dmabuf_feedback_v1#16)
[3478298.053] {Default Queue}  -> wl_display#1.sync(new id wl_callback#17)
[3478298.055] {Default Queue} wl_registry#2.global(66, "wl_output", 4)
[3478298.058] {Default Queue}  -> wl_registry#2.bind(66, "wl_output", 4, new id [unknown]#18)
[3478298.067] {Default Queue}  -> wl_display#1.sync(new id wl_callback#19)
[3478298.069] {Default Queue} wl_callback#3.done(2979)
[3478298.186] {Display Queue} wl_display#1.delete_id(17)
[3478298.191] {Display Queue} wl_display#1.delete_id(19)
[3478298.193] {Default Queue} wl_seat#4.name("Hyprland")
[3478298.195] {Default Queue} wl_seat#4.capabilities(3)
[3478298.198] {Default Queue}  -> wl_seat#4.get_keyboard(new id wl_keyboard#3)
[3478298.204] {Default Queue}  -> wl_seat#4.get_pointer(new id wl_pointer#20)
[3478298.209] {Default Queue}  -> wp_cursor_shape_manager_v1#9.get_pointer(new id wp_cursor_shape_device_v1#21, wl_pointer#20)
[3478298.212] {Default Queue} wl_shm#6.format(0)
[3478298.214] {Default Queue} wl_shm#6.format(1)
[3478298.216] {Default Queue} wl_shm#6.format(875709016)
[3478298.217] {Default Queue} wl_shm#6.format(875708993)
[3478298.219] {Default Queue} wl_shm#6.format(808669784)
[3478298.221] {Default Queue} wl_shm#6.format(808669761)
[3478298.223] {Default Queue} wl_shm#6.format(808665688)
[3478298.225] {Default Queue} wl_shm#6.format(808665665)
[3478298.226] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.format_table(fd 10, 4144)
[3478298.869] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.main_device(array[8])
[3478299.056] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_target_device(array[8])
[3478299.061] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_flags(0)
[3478299.064] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_formats(array[402])
[3478299.066] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_done()
[3478299.068] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.done()
[3478299.071] {Default Queue} wl_callback#17.done(2979)
[3478299.074] {Default Queue} wl_output#18.name("HDMI-A-2")
[3478299.079] {Default Queue} wl_output#18.description("Acer Technologies EK241Y 0460158A3LCJ (HDMI-A-2)")
[3478299.084] {Default Queue} wl_output#18.scale(1)
[3478299.086] {Default Queue} wl_output#18.mode(1, 1920, 1080, 60000)
[3478299.098] {Default Queue} wl_output#18.geometry(0, 0, 530, 300, 0, "Acer Technologies", "EK241Y", 0)
[3478299.105] {Default Queue} wl_output#18.done()
[3478299.110] {Default Queue} wl_callback#19.done(2979)
[3478325.391] {Default Queue}  -> zwp_text_input_manager_v3#10.get_text_input(new id zwp_text_input_v3#19, wl_seat#4)
[3478340.268] {Default Queue}  -> wl_compositor#5.create_surface(new id wl_surface#17)
[3478340.283] {Default Queue}  -> wl_compositor#5.create_region(new id wl_region#22)
[3478340.287] {Default Queue}  -> wl_region#22.add(0, 0, 2147483647, 2147483647)
[3478340.289] {Default Queue}  -> wl_surface#17.set_input_region(wl_region#22)
[3478340.292] {Default Queue}  -> wp_fractional_scale_manager_v1#8.get_fractional_scale(new id wp_fractional_scale_v1#23, wl_surface#17)
[3478340.297] {Default Queue}  -> wp_viewporter#7.get_viewport(new id wp_viewport#24, wl_surface#17)
[3478340.300] {Default Queue}  -> wl_region#22.destroy()
[3478340.302] {Default Queue}  -> zwlr_layer_shell_v1#12.get_layer_surface(new id zwlr_layer_surface_v1#25, wl_surface#17, wl_output#18, 0, "hyprtoolkit-app")
[3478340.307] {Default Queue}  -> zwlr_layer_surface_v1#25.set_size(0, 0)
[3478340.309] {Default Queue}  -> zwlr_layer_surface_v1#25.set_anchor(15)
[3478340.311] {Default Queue}  -> zwlr_layer_surface_v1#25.set_exclusive_zone(-1)
[3478340.313] {Default Queue}  -> zwlr_layer_surface_v1#25.set_margin(0, 0, 0, 0)
[3478340.315] {Default Queue}  -> zwlr_layer_surface_v1#25.set_keyboard_interactivity(0)
[3478340.316] {Default Queue}  -> wl_surface#17.commit()
[3478340.391] {Default Queue} wl_keyboard#3.keymap(1, fd 17, 40103)
[3478343.079] {Default Queue} wl_keyboard#3.repeat_info(60, 500)
[3478343.187] {Display Queue} wl_display#1.delete_id(22)
[3478343.192] {Default Queue} zwlr_layer_surface_v1#25.configure(2980, 1920, 1080)
[3478343.202] {Default Queue}  -> zwlr_layer_surface_v1#25.ack_configure(2980)
[3478343.206] {Default Queue}  -> wp_viewport#24.set_destination(1920, 1080)
[3478343.210] {Default Queue}  -> wl_surface#17.set_buffer_scale(1)
[3478343.948] {Default Queue}  -> zwp_linux_dmabuf_v1#15.create_params(new id zwp_linux_buffer_params_v1#22)
[3478343.956] {Default Queue}  -> zwp_linux_buffer_params_v1#22.add(fd 21, 0, 0, 15360, 33554432, 410434307)
[3478343.960] {Default Queue}  -> zwp_linux_buffer_params_v1#22.add(fd 22, 1, 16711680, 2048, 33554432, 410434307)
[3478343.962] {Default Queue}  -> zwp_linux_buffer_params_v1#22.create_immed(new id wl_buffer#26, 1920, 1080, 1211384385, 0)
[3478343.966] {Default Queue}  -> zwp_linux_buffer_params_v1#22.destroy()
[3478343.969] {Default Queue}  -> zwp_linux_dmabuf_v1#15.create_params(new id zwp_linux_buffer_params_v1#27)
[3478343.971] {Default Queue}  -> zwp_linux_buffer_params_v1#27.add(fd 23, 0, 0, 15360, 33554432, 410434307)
[3478343.974] {Default Queue}  -> zwp_linux_buffer_params_v1#27.add(fd 24, 1, 16711680, 2048, 33554432, 410434307)
[3478343.976] {Default Queue}  -> zwp_linux_buffer_params_v1#27.create_immed(new id wl_buffer#28, 1920, 1080, 1211384385, 0)
[3478343.979] {Default Queue}  -> zwp_linux_buffer_params_v1#27.destroy()
[3478343.997] {Default Queue}  -> wl_compositor#5.create_region(new id wl_region#29)
[3478344.005] {Default Queue}  -> wl_region#29.add(0, 0, 1920, 1080)
[3478344.008] {Default Queue}  -> wl_surface#17.set_opaque_region(wl_region#29)
[3478344.010] {Default Queue}  -> wl_region#29.destroy()
[3478344.044] {Default Queue}  -> wp_linux_drm_syncobj_manager_v1#14.get_surface(new id wp_linux_drm_syncobj_surface_v1#30, wl_surface#17)
[3478344.055] {Default Queue}  -> wp_linux_drm_syncobj_manager_v1#14.import_timeline(new id wp_linux_drm_syncobj_timeline_v1#31, fd 22)
[3478612.652] {Default Queue}  -> wl_surface#17.frame(new id wl_callback#32)
[3478612.673] {Default Queue}  -> wl_surface#17.damage_buffer(0, 0, 1920, 1080)
[3478612.677] {Default Queue}  -> wp_linux_drm_syncobj_surface_v1#30.set_acquire_point(wp_linux_drm_syncobj_timeline_v1#31, 0, 2)
[3478612.681] {Default Queue}  -> wp_linux_drm_syncobj_surface_v1#30.set_release_point(wp_linux_drm_syncobj_timeline_v1#31, 0, 3)
[3478612.978] {Default Queue}  -> wl_surface#17.attach(wl_buffer#26, 0, 0)
[3478612.988] {Default Queue}  -> wl_surface#17.commit()
[3478631.899] {Display Queue} wl_display#1.delete_id(22)
[3478631.910] {Display Queue} wl_display#1.delete_id(27)
[3478631.913] {Display Queue} wl_display#1.delete_id(29)
[3478631.914] {Display Queue} wl_display#1.delete_id(32)
[3478631.916] {Default Queue} wl_callback#32.done(570567)
[3478631.948] {Default Queue}  -> wl_compositor#5.create_region(new id wl_region#32)
[3478631.951] {Default Queue}  -> wl_region#32.add(0, 0, 1920, 1080)
[3478631.973] {Default Queue}  -> wl_surface#17.set_opaque_region(wl_region#32)
[3478631.975] {Default Queue}  -> wl_region#32.destroy()
[3478632.032] {Default Queue}  -> wp_linux_drm_syncobj_manager_v1#14.import_timeline(new id wp_linux_drm_syncobj_timeline_v1#29, fd 23)
[3478632.064] {Default Queue}  -> wl_surface#17.frame(new id wl_callback#27)
[3478632.067] {Default Queue}  -> wl_surface#17.damage_buffer(0, 0, 1920, 1080)
[3478632.087] {Default Queue}  -> wp_linux_drm_syncobj_surface_v1#30.set_acquire_point(wp_linux_drm_syncobj_timeline_v1#29, 0, 2)
[3478632.090] {Default Queue}  -> wp_linux_drm_syncobj_surface_v1#30.set_release_point(wp_linux_drm_syncobj_timeline_v1#29, 0, 3)
[3478634.794] {Default Queue}  -> wl_surface#17.attach(wl_buffer#28, 0, 0)
[3478634.808] {Default Queue}  -> wl_surface#17.commit()
[3478634.812] {Default Queue} wl_surface#17.enter(wl_output#18)
[3478634.816] {Default Queue} wp_fractional_scale_v1#23.preferred_scale(120)
[3478634.846] {Default Queue} wl_surface#17.preferred_buffer_scale(1)
[3478634.850] {Default Queue} wl_surface#17.preferred_buffer_transform(0)
[3478636.664] {Display Queue} wl_display#1.delete_id(32)
[3478636.673] {Default Queue} wl_buffer#26.release()
[3478636.677] {Default Queue} wl_surface#17.preferred_buffer_scale(1)
[3478636.679] {Default Queue} wl_surface#17.preferred_buffer_transform(0)
[3482055.280] {Default Queue} zwlr_layer_surface_v1#25.closed()
[3482055.307] {Default Queue}  -> zwlr_layer_surface_v1#25.destroy()
[3482055.313] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.format_table(fd 23, 4144)
[3482056.190] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.main_device(array[8])
[3482056.374] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_target_device(array[8])
[3482056.380] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_flags(0)
[3482056.384] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_formats(array[402])
[3482056.387] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_done()
[3482056.390] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.done()
[3482056.396] {Default Queue} wl_registry#2.global_remove(66)
[3482056.421] {Default Queue}  -> wp_viewport#24.destroy()
[3482056.428] {Default Queue}  -> wp_fractional_scale_v1#23.destroy()
[3482056.460] {Default Queue}  -> wl_buffer#28.destroy()
[3482056.465] {Default Queue}  -> wp_linux_drm_syncobj_timeline_v1#29.destroy()
[3482056.474] {Default Queue}  -> wl_buffer#26.destroy()
[3482056.478] {Default Queue}  -> wp_linux_drm_syncobj_timeline_v1#31.destroy()
[3482056.483] {Default Queue}  -> wp_linux_drm_syncobj_surface_v1#30.destroy()
[3482056.493] {Default Queue}  -> wl_surface#17.destroy()
[3482056.515] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.format_table(fd 24, 3216)
[3482057.002] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.main_device(array[8])
[3482057.171] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_target_device(array[8])
[3482057.176] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_flags(0)
[3482057.179] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_formats(array[402])
[3482057.182] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_done()
[3482057.185] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.done()
[3482057.319] discarded [unknown]#28.[event 0](0 fd, 8 byte)
[3482057.336] discarded [unknown]#28.[event 0](0 fd, 8 byte)
[3482057.338] discarded [unknown]#28.[event 0](0 fd, 8 byte)
[3482057.340] discarded [unknown]#26.[event 0](0 fd, 8 byte)
[3482057.342] discarded [unknown]#26.[event 0](0 fd, 8 byte)
[3482057.527] {Display Queue} wl_display#1.delete_id(25)
[3482057.537] {Display Queue} wl_display#1.delete_id(24)
[3482057.541] {Display Queue} wl_display#1.delete_id(23)
[3482057.544] {Display Queue} wl_display#1.delete_id(28)
[3482057.547] {Display Queue} wl_display#1.delete_id(29)
[3482057.550] {Display Queue} wl_display#1.delete_id(26)
[3482057.553] {Display Queue} wl_display#1.delete_id(31)
[3482057.556] {Display Queue} wl_display#1.delete_id(30)
[3482057.559] {Display Queue} wl_display#1.delete_id(17)
[3482057.562] {Display Queue} wl_display#1.delete_id(27)
[3484024.567] {Display Queue} wl_display#1.delete_id(18)
[3484024.587] {Default Queue} wl_registry#2.global(67, "wl_output", 4)
[3484024.595] {Default Queue}  -> wl_registry#2.bind(67, "wl_output", 4, new id [unknown]#27)
[3484024.605] {Default Queue}  -> wl_display#1.sync(new id wl_callback#17)
[3484024.608] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.format_table(fd 17, 4144)
[3484025.233] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.main_device(array[8])
[3484025.399] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_target_device(array[8])
[3484025.404] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_flags(0)
[3484025.406] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_formats(array[402])
[3484025.408] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_done()
[3484025.410] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.done()
[3484025.414] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.format_table(fd 18, 4144)
[3484026.019] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.main_device(array[8])
[3484026.228] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_target_device(array[8])
[3484026.233] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_flags(0)
[3484026.236] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_formats(array[402])
[3484026.238] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.tranche_done()
[3484026.239] {Default Queue} zwp_linux_dmabuf_feedback_v1#16.done()
[3484043.201] {Display Queue} wl_display#1.delete_id(17)
[3484043.227] {Default Queue} wl_output#27.name("HDMI-A-2")
[3484043.252] {Default Queue} wl_output#27.description("Acer Technologies EK241Y 0460158A3LCJ (HDMI-A-2)")
[3484043.262] {Default Queue} wl_output#27.scale(1)
[3484043.266] {Default Queue} wl_output#27.mode(1, 1920, 1080, 60000)
[3484043.281] {Default Queue} wl_output#27.geometry(0, 0, 530, 300, 0, "Acer Technologies", "EK241Y", 0)
[3484043.290] {Default Queue} wl_output#27.done()
[3484043.298] {Default Queue} wl_callback#17.done(2987)
hyprpaper log (removed dmabuf format spam)
DEBUG ]: Welcome to hyprpaper!
built from commit 83a7586ad20d263e320ee9418e09fcc65055bf44 (f)
DEBUG ]: Starting the Wayland platform
DEBUG ]: Connected to a wayland compositor: Hyprland
DEBUG ]: Got registry at 0x3971c1d0
DEBUG ]: zwp_linux_dmabuf_v1: Got main device
DEBUG ]: zwp_linux_dmabuf_v1: Got node /dev/dri/renderD128
DEBUG ]: zwp_linux_dmabuf_v1: Got done
DEBUG ]: wayland output 66: name HDMI-A-2
DEBUG ]: wayland output 66: description Acer Technologies EK241Y 0460158A3LCJ (HDMI-A-2)
DEBUG ]: wayland output 66: dimensions [Vector2D: x: 1920, y: 1080]
DEBUG ]: wayland output 66: make Acer Technologies model EK241Y
DEBUG ]: wayland output 66: done
DEBUG ]: zwp_linux_dmabuf_v1: opened node /dev/dri/renderD128 with fd 11
DEBUG ]: Supported EGL global extensions: (16) EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_device EGL_EXT_explicit_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_EXT_platform_x11 EGL_KHR_platform_x11 EGL_EXT_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless
DEBUG ]: eglDeviceFromDRMFD: Using device /dev/dri/card1
DEBUG ]: EGL: IMG_context_priority supported, requesting high
DEBUG ]: EGL: EXT_create_context_robustness supported, requesting lose on reset
DEBUG ]: EGL: Got a high priority context
DEBUG ]: DRM syncobj timeline support: yes
DEBUG ]: Found 1 output(s)
DEBUG ]: wayland: configure layer with 1920x1080
DEBUG ]: layer: got fractional scale: 100.0%
DEBUG ]: zwp_linux_dmabuf_v1: Got main device
DEBUG ]: zwp_linux_dmabuf_v1: Got node /dev/dri/renderD128
DEBUG ]: zwp_linux_dmabuf_v1: Got done
DEBUG ]: zwp_linux_dmabuf_v1: Got main device
DEBUG ]: zwp_linux_dmabuf_v1: Got node /dev/dri/renderD128
DEBUG ]: zwp_linux_dmabuf_v1: Got done
DEBUG ]: zwp_linux_dmabuf_v1: Got main device
DEBUG ]: zwp_linux_dmabuf_v1: Got node /dev/dri/renderD128
DEBUG ]: zwp_linux_dmabuf_v1: Got done
DEBUG ]: zwp_linux_dmabuf_v1: Got main device
DEBUG ]: zwp_linux_dmabuf_v1: Got node /dev/dri/renderD128
DEBUG ]: zwp_linux_dmabuf_v1: Got done
DEBUG ]: wayland output 67: name HDMI-A-2
DEBUG ]: wayland output 67: description Acer Technologies EK241Y 0460158A3LCJ (HDMI-A-2)
DEBUG ]: wayland output 67: dimensions [Vector2D: x: 1920, y: 1080]
DEBUG ]: wayland output 67: make Acer Technologies model EK241Y
DEBUG ]: wayland output 67: done

@vaxerski
Copy link
Member Author

vaxerski commented Dec 2, 2025

should be both fixed, pls check

@EvilLary
Copy link

EvilLary commented Dec 2, 2025

should be both fixed, pls check

Yep, both work now

@EvilLary
Copy link

EvilLary commented Dec 2, 2025

Is it possible to have smoothing as an option or by default since high res images look 'gritty' or grainy with this branch

Hyprpaper with hyprtoolkit image
main branch Hyprpaper image
used wallpaper

philipp-pilz-LmDtHyqCQb0-unsplash

@vaxerski
Copy link
Member Author

vaxerski commented Dec 2, 2025

huh, it shouldnt, wut

can you post the images separately github doesnt wanna show em when I click on them

@EvilLary
Copy link

EvilLary commented Dec 2, 2025

can you post the images separately github doesnt wanna show em when I click on them

https://postimg.cc/gallery/R30DtcJ

@vaxerski
Copy link
Member Author

vaxerski commented Dec 2, 2025

hm, hyprtoolkit does linear sampling, IIRC with hyprpaper on cairo we did "good" aa, but this isn't really something we do in toolkit. To be fair, I barely see the difference in these.

@EvilLary
Copy link

EvilLary commented Dec 3, 2025

I'ven't used hyprtoolkit, but I'm curious why is it needed to have null and background elements instead of just slapping the image & splash onto the root element

@vaxerski
Copy link
Member Author

vaxerski commented Dec 3, 2025

null is just for my convenience
background is there so that the wallpapers are always opaque, which allows toolkit to send an opaque region, which allows hyprland to occlude the default background, which saves resources.

@vaxerski
Copy link
Member Author

vaxerski commented Dec 3, 2025

IPC re-added, but with hyprwire. This means old hyprctl commands will no longer work. See hyprwm/Hyprland#12537

New syntax:

hyprctl hyprpaper wallpaper [mon], [path], [fit_mode]

fit mode optional.

@nonetrix
Copy link

nonetrix commented Dec 3, 2025

Maybe I'm stupid but seems to completely ignore my configs
image

IPC as well

image

@vaxerski
Copy link
Member Author

vaxerski commented Dec 3, 2025

your entier family stoobid

firstly its PATH not FILE

secondly ipc requires a full path

@vaxerski
Copy link
Member Author

vaxerski commented Dec 3, 2025

here it will now resolve in hyprctl check the hyprland mr

@vaxerski
Copy link
Member Author

vaxerski commented Dec 3, 2025

anything else outstanding?

@EvilLary
Copy link

EvilLary commented Dec 4, 2025

Seg fault in UI.cpp:72 if ipc is disabled

config
$path = /home/spicy/Pictures/Wallpapers/martin-martz-P66DWe8AAbo-unsplash.jpg
# preload = $path
# wallpaper = ,$path
ipc = false
splash = true
wallpaper {
    monitor = 
    fit_mode = cover
    path = $path
}
backtrace
#0  0x000000000044189c in __gnu_cxx::__normal_iterator<Hyprutils::Memory::CSharedPointer<CHyprpaperCoreManagerObject>*, std::vector<Hyprutils::Memory::CSharedPointer<CHyprpaperCoreManagerObject>, std::allocator<Hyprutils::Memory::CSharedPointer<CHyprpaperCoreManagerObject> > > >::__normal_iterator (this=<optimized out>, __i=<error reading variable: Cannot access memory at address 0x30>)
    at /usr/include/c++/15.2.1/bits/stl_iterator.h:1059
#1  std::vector<Hyprutils::Memory::CSharedPointer<CHyprpaperCoreManagerObject>, std::allocator<Hyprutils::Memory::CSharedPointer<CHyprpaperCoreManagerObject> > >::begin (this=0x30)
    at /usr/include/c++/15.2.1/bits/stl_vector.h:999
#2  0x000000000043c63f in IPC::CSocket::onNewDisplay (this=0x0, sv="HDMI-A-2") at /home/spicy/git/hyprpaper/src/ipc/IPC.cpp:138
        m = @0x1d8247d0: {impl_ = 0x1cb20530, m_data = 0x1cb19bd0}
#3  0x0000000000449b69 in CUI::registerOutput (this=0x1caa25e0, mon=...) at /home/spicy/git/hyprpaper/src/ui/UI.cpp:72
#4  0x0000000000449eaa in CUI::run (this=0x1caa25e0) at /home/spicy/git/hyprpaper/src/ui/UI.cpp:94
        m = @0x1d8247d0: {impl_ = 0x1cb20530, m_data = 0x1cb19bd0}
        PENABLEIPC = {p_ = 0x1ca82e70}
        MONITORS = std::vector of length 1, capacity 1 = {{impl_ = 0x1cb20530, m_data = 0x1cb19bd0}}
#5  0x0000000000445fac in main (argc=1, argv=0x7ffc72bcb788, envp=0x7ffc72bcb798) at /home/spicy/git/hyprpaper/src/main.cpp:37
        parser = {m_impl = {impl_ = 0x1cab16f0}}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants